肺癌结节检测

Kaggle 肺癌结节检测(Data Science Bowl 2017)第二名解析

目录

  • 基本信息
  • 数据、预处理、创建训练集
  • 3D卷积神经网络的训练方法和网络结构
  • 癌症预测
  • 资料参考与借鉴

基本信息

比赛相关

Kaggle网站举办了一场用肺部CT图像进行肺癌检测的比赛Data Science Bowl 2017,提供百万美元奖金池。美国国家癌症研究所为比赛提供了高分辨率的肺部CT图像,在比赛中,参赛者根据给定的一组病人肺部CT三维图像,预测癌症风险。

Julian de Wit和Daniel Hammack合作完成的解决方案获得了比赛的第二名。Wit最近写了一篇博客来介绍他们的方案。他们通过3D卷积神经网络,来构建结节探测器,预测患癌可能性。Wit在64位的Windows10系统下,结合TensorFlow 0.12.0和Keras库实现该网络模型。

初步计划

  • 肺部CT图像信噪比大约为1:1000

  • 标准kaggle数据中只有1300个训练样本及对应的癌症标签

  • 必须找到标签和图像特征更直接的关系

  • 借鉴LUNA16,提供了医生为800+病人标注的1000多个肺结节

  • 从整体CT图像中的标记周围裁剪出小型3D图像块,最终可以用更小的3D图像块与结节标记直接对应。结节大小是癌症的一个影响因素,数据集也说明了结节的大小。

  • LUNA16数据集是由另一个公开数据集LIDC-IDRI转化过来的。在原始数据集中,医生不仅要检测结节,而且还评估了结节的恶性程度和其他指标。我们发现,恶性程度是评估患癌风险的最佳指标,也是神经网络可以学习的。

    最终方案

    训练一个神经网络来检测结节,并评估结节的恶性程度。在预测时,网络通过滑动窗口来遍历整体CT图像,分别判断每个滑动窗口的区域包含恶性信息的可能性。最后基于这种信息和其他特征,估计该患者发展成癌症的可能性。

    数据、预处理、创建训练集

    处理图像

  • 缩放CT图像:每个像素点只表示1x1x1毫米的体积。

  • 对于CT图像,像素强度可以用Hounsfield来表示,一般叫做亨氏单位。论坛里提到,要尽量降低像素强度,即最大化hounsfield值,然后归一化处理。同时还要确保所有CT扫描都具有相同的方向。

  • 极大部分关于结节检测的文献都是先从CT扫描图像中分离出肺组织。然而目前没有合适的分割方法 ——解决方式:训练一个U-net网络,来更好地分割肺部。

    数据集

    使用样本中的标签,自动生成训练集的标签,也采用主动学习方法,添加部分人工标记。以下是带有标记的不同数据集:

    数据集部分做了大量的工作

  • LIDC数据集中被正面标记的数量是LUNA16数据集样本数的五倍。因为这些标记是4名医生的综合注释,所以一个结节可能被标记了4次。但LUNA16也忽略了不到3名医生标注的结节。我决定在训练集中保留这些被忽视的结节,因为他们也提供了宝贵的结节恶性信息。

  • LUNA16 v2数据集的标签是直接从LUNA16传来,一般是多个结节检测系统错误标出的假阳性结节。要注意的是,部分结节是上面提到的不到3名医生标记的结节。保留了这些结节标记,是为了平衡那些可疑的假阳性结节。

  • 为了得到肺部轮廓,需要得到非肺组织的底片。使用了论坛中提到的简单肺分割算法,在分割掩码边缘周围进行采样标注,从而分割得到肺部组织。

  • 在进行第一轮训练之后,在LUNA16数据集上进行结节预测,得到了所有假阳性结节,也并入LUNA16 v2数据集中。

  • NDSB数据集上训练网络。手动地从癌症样本中选择明显的阳性结节,并从非癌症样本中选择假阳性结节,用这些数据训练了第二个模型。(我希望效果不错,但我是一个不合格的放射科医生,实际上第二个模型比无手动标注的模型要糟糕得多。但是结合这两个模型,这个得到的融合模型比单独的模型效果更好,所以我保留了第二个模型。)


    UNet简介

    语义分割

    — 语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类

    比如说下图,原始图片是一张街景图片,经过语义分割之后的图片就是一个包含若干种颜色的图片,其中每一种颜色都代表一类。

    注意区分目标检测(二分类)、目标识别(二分或多分类)、实例分割

    FCN与CNN

    全卷积神经网络中,没有了全连接层,取而代之的是卷积层,如下图所示:

    最后一层输出的是1000个二维数组,其中每一个数组可以可视化成为一张图像,图中的每一个像素点的灰度值都是代表当前像素点属于该类的概率,比如在这1000张图像中,取出其中代表tabby cat的概率图,颜色从蓝到红,代表当前点属于该类的概率就越大。

    可以看出FCN与CNN之间的区别就是把最后几层的全连接层换成了卷积层,这样做的好处就是能够进行dense prediction。从而实现FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。

    U-Net 是这种方法中最常用的结构之一。


    3D卷积神经网络的训练方法和网络结构

    基础结节检测器样本增强

    第一个目标是训练一个可作为基础的结节检测器。先要对正面例子进行过采样,将正反两类的样本比上调到1:20。为了提高模型的泛化能力,尝试了一些图像增强操作,但是只有一些无损的操作是有用的。最后我用了大量的转化操作和所有3D翻转操作。

    恶化程度回归模型

    训练一个用于估计恶化程度的回归模型。将肿瘤恶化程度分为从1(很可能不是恶性)到5(很可能是恶性的)。为了强调肿瘤的恶性程度,将标签平方,范围扩大为从1到25。最开始,考虑了分阶段的一种方法,用第一个网络来分类节点,然后训练另一个网络估计结节的恶化程度。为了缩短计算时间,尝试只用一个网络,以多任务学习的方法,同时进行训练这两个任务。当编程实现后,发现这个方法简单快速,网络的效果也很好。

    网络使用

    神经网络的结构上花费的时间相对较少,因为已经有很多优秀网络可供参考。刚开始我使用了一些简单的VGG网络和Resnet网络的相似结构,但是它们的性能大致相同。然后我尝试用一个预训练好的C3D网络,原有的网络权重根本没有帮助,但直接初始化权重后,这种网络结构的效果很好。基于C3D网络进行若干次调整后,我得到最终的分类评估网络。

    3D卷积神经网络简介

    提出背景

    基于视频分析的问题,2D convolution不能很好得捕获时序上的信息。因此3D convolution就被提出来了。

    C3D network

    C3D network是作为一个通用的网络提出的,文章中将其用于行为识别,场景识别,视频相似度分析等领域。

    2D 与 3D 卷积操作

    a)和b)分别为2D卷积用于单通道图像和多通道图像的情况(此处多通道图像可以指同一张图片的3个颜色通道,也指多张堆叠在一起的图片,即一小段视频),对于一个滤波器,输出为一张二维的特征图,多通道的信息被完全压缩了。而c)中的3D卷积的输出仍然为3D的特征图。

    现在考虑一个视频段输入,其大小为 c∗l∗h∗w,其中c为图像通道(一般为3),l为视频序列的长度,h和w分别为视频的宽与高。进行一次kernel size为3∗3∗3,stride为1,padding=True,滤波器个数为K的3D 卷积后,输出的大小为K∗l∗h∗w。池化同理。

    C3D network 结构

    基于3D卷积操作,作者设计了如上图所示的C3D network结构。共有8次卷积操作,4次池化操作。其中卷积核的大小均为3∗3∗3,即一次输入16帧图像。

    癌症预测

    结果与问题

    训练好网络后,下一步是让神经网络检测结节并估计其恶化程度。

  • 检测到了许多作者完全忽视的结节

  • 严重的问题:错过了一些非常大的明显结节,所以影响了对于假阴性的得分,有时使LogLoss升高了3.00。

    解决方式

    对CT图像进行了两次降采样,看看检测器是否会检测大结节。值得注意的是,它的效果非常好。因此,我调整了网络结构,让网络预测3个尺度,分别为1,1.5和2.0。

    在缩放1x的左图中,没有很好地检测到大结节;但是在2x放大的右图时,效果较好。矩形的大小表示检测到的恶性肿瘤。

Kaggle 肺癌结节检测(Data Science Bowl 2017)微软团队解析

基本信息

微软的 Miguel Fierro, Ye Xing, Tao Wu 等人在 2017 年 1 月 Kaggle 上的“数据科学肺癌检测竞赛”里,在60 分钟内,利用已训练好的卷积神经网络 ResNet-157 提取 CT 图像的特征,并训练提升树(boosted tree),以识别肺癌 CT 影像是癌症阴性或阳性。他们获得了不错的成绩——1 月 19 日之前排名位前 10%,2 月 7 日之前,居前 20%(其实挺一般的)。

使用工具

  1. 特征提取:已训练好的卷积神经网络——一个用 CNTK 开发的 152 层 ResNet 模型,用 ImageNet 的图像数据集进行的训练;
  2. 图像分类:LightGBM 灰度提升框架;
  3. 带 GPU 加速的 Azure 虚机;

个人感觉最normal的方法吧,谁让kaggle这个判断只是否具有癌症。

LightGBM

LightGBM是微软DMTK框架的一部分,将灰度提升树用于分布式集群上,以达到更快的速度,而且随着节点数增加,可以成比例地提高计算性能。据好事者测,比XGBoost快10倍,内存使用稍微少些。作为微软AI的两大利器,DMTK(Distributed Machine Learning Toolkit)主要优势是分布式,而非深度学习。CNTK的优势在于深度学习,所以这两种常常一起用。

技术细节

  • 像 ImageNet 的 RBG 样本那样,裁切到 224x224 大小,三张一组。分成 K 批输入前面提到的已训练的神经网络,计算到“pentimate layer”为止。
  • 去掉最后的pooling 和 softmax 层,设置penultimate layer,作为输出及分类器输入。
  • LightGBM分类器(实验时候尝试的,之后换成了ResNet)

阿里天池肺部结节智能检测

背景介绍

  • 肺癌-世界死亡率最高的癌症
  • CT 影像-肺癌检测最直接有效的工具
  • 肺结节-肺癌的早期临床表现
  • 肺结节检测-肺癌检测中最重要的环节
  • 医生使用逐层观察的阅片方式
  • 3D检测
  • 结合医学知识

img

img

img

相关比赛介绍

LUNA2016

  • 888例CT图像
  • 结节检测与良恶性判别
  • 需提交结节坐标与概率
  • FROC、十折交叉验证作为评价指标

LUNA2016中作者使用的方法

img

  • Faster— RCNN逐层扫描,连续三个图作为RGB三个通道,VGG-16
  • Feature map增大——反卷积
  • anchor大小调整
  • 设计三维NMS(极大值抑制)方案合并二维图像
  • 最后 利用3D VGG网络 进行分类
  • 第一名

Kaggle Data Science Bowl 2017

  • 癌症预测
  • 1600例训练数据和500例测试数据
  • 标注是否会得癌症
  • 二分类交叉熵损失

Kaggle竞赛中作者的解决方案

  • 2D Faster RCNN + 3D CNN检测
  • 利用LIDC-IDRI数据集的结节良恶信息进行结节分类
  • 获得第四名

天池医疗AI大赛

  • 初复赛不同
  • 复赛意义不大。

img

问题难点

  • 肺结节体积变化大、形状各异
  • 肺结节亮度差异大
  • 肺内环境复杂
  • CT成像质量有差异
  • 肺门区域结节(非孤立结节,附近有器官、气管等影响),需要整合多尺度信息,有效地将结节与正常组织区分开。

    img

  • 磨玻璃结节,亮度低,形状不规则。

img

  • 结节临床意义分析。

复赛使用方法

框架

NOTE:其实初赛还是使用faster rcnn,只是由于复赛条件限制改变了。所以略。

img

特征金字塔网络

特征金字塔在基于深度学习的多尺度目标检测中早有应用,通常有以下几种使用方式。

(1)网络是一个简单的全卷积网络,为了检测不同尺度的目标,依次将原图按比例缩放并送入网络。缺点是需要多次resize图像,繁琐耗时。

(2) 网络是一个高深的全卷积网络,输入任意尺寸的原图,得到一个feature map,在feature map上进行多个尺度的目标位置回归。 R-CNN系列就是这种方法。缺点是容易漏掉小目标,同时搞定多个尺度难度较大。

(3) 对(2)进行改进,在不同分辨率的feature map上进行目标位置预测。缺点是底部的feature map的特征表达能力不足。

(4)有点类似(2)和(3)的组合,既可以在不同分辨率的feature map上检测对应尺度的目标,同时feature map又具有足够的特征表达能力。这是因为每层的feature map来源于当前层和更高级层的特征融合。

具体的融合方法如下图所示,每一级的feature map尺寸都是2倍的关系,“2x up”采用的是最简单的最近邻上采样。

资料参考与借鉴

  1. Kaggle百万美元大赛优胜者:用CNN识别CT图像检测肺癌

  2. 语义分割(semantic segmentation) 常用神经网络介绍对比-FCN SegNet U-net DeconvNet

  3. Github 源码

  4. 一篇文章掌握Kaggle竞赛中的基于ResNet和Azure GPU加速的肺癌CT图像识别

  5. 目标检测——特征金字塔网络